1 /*
2   D bindings for CUDA.
3   Authors:    Prasun Anand
4   Copyright:  Copyright (c) 2017, Prasun Anand. All rights reserved.
5   License:    BSD 3-Clause License
6 */
7 
8 module cuda_d.cublas_api;
9 
10 import cuda_d.cuComplex;
11 
12 extern (C):
13 
14 alias void* cudaStream_t;
15 
16 
17 struct half {
18    ushort x;
19 }
20 
21 struct half2 {
22    uint x;
23 }
24 
25 enum cublasStatus_t
26 {
27     CUBLAS_STATUS_SUCCESS = 0,
28     CUBLAS_STATUS_NOT_INITIALIZED = 1,
29     CUBLAS_STATUS_ALLOC_FAILED = 3,
30     CUBLAS_STATUS_INVALID_VALUE = 7,
31     CUBLAS_STATUS_ARCH_MISMATCH = 8,
32     CUBLAS_STATUS_MAPPING_ERROR = 11,
33     CUBLAS_STATUS_EXECUTION_FAILED = 13,
34     CUBLAS_STATUS_INTERNAL_ERROR = 14,
35     CUBLAS_STATUS_NOT_SUPPORTED = 15,
36     CUBLAS_STATUS_LICENSE_ERROR = 16
37 }
38 
39 enum cublasFillMode_t
40 {
41     CUBLAS_FILL_MODE_LOWER = 0,
42     CUBLAS_FILL_MODE_UPPER = 1
43 }
44 
45 enum cublasDiagType_t
46 {
47     CUBLAS_DIAG_NON_UNIT = 0,
48     CUBLAS_DIAG_UNIT = 1
49 }
50 
51 enum cublasSideMode_t
52 {
53     CUBLAS_SIDE_LEFT = 0,
54     CUBLAS_SIDE_RIGHT = 1
55 }
56 
57 enum cublasOperation_t
58 {
59     CUBLAS_OP_N = 0,
60     CUBLAS_OP_T = 1,
61     CUBLAS_OP_C = 2
62 }
63 
64 enum cublasPointerMode_t
65 {
66     CUBLAS_POINTER_MODE_HOST = 0,
67     CUBLAS_POINTER_MODE_DEVICE = 1
68 }
69 
70 enum cublasAtomicsMode_t
71 {
72     CUBLAS_ATOMICS_NOT_ALLOWED = 0,
73     CUBLAS_ATOMICS_ALLOWED = 1
74 }
75 
76 /* Used by cublasSgemmEx */
77 enum cublasDataType_t
78 {
79     CUBLAS_DATA_FLOAT = 0,
80     CUBLAS_DATA_DOUBLE = 1,
81     CUBLAS_DATA_HALF = 2,
82     CUBLAS_DATA_INT8 = 3
83 }
84 
85 /* Opaque structure holding CUBLAS library context */
86 struct cublasContext;
87 alias cublasHandle_t = cublasContext*;
88 
89 cublasStatus_t cublasCreate_v2 (cublasHandle_t* handle);
90 cublasStatus_t cublasDestroy_v2 (cublasHandle_t handle);
91 cublasStatus_t cublasGetVersion_v2 (cublasHandle_t handle, int* version_);
92 cublasStatus_t cublasSetStream_v2 (cublasHandle_t handle, cudaStream_t streamId);
93 cublasStatus_t cublasGetStream_v2 (cublasHandle_t handle, cudaStream_t* streamId);
94 
95 cublasStatus_t cublasGetPointerMode_v2 (cublasHandle_t handle, cublasPointerMode_t* mode);
96 cublasStatus_t cublasSetPointerMode_v2 (cublasHandle_t handle, cublasPointerMode_t mode);
97 
98 cublasStatus_t cublasGetAtomicsMode (cublasHandle_t handle, cublasAtomicsMode_t* mode);
99 cublasStatus_t cublasSetAtomicsMode (cublasHandle_t handle, cublasAtomicsMode_t mode);
100 
101 
102 cublasStatus_t cublasSetVector (
103     int n,
104     int elemSize,
105     const(void)* x,
106     int incx,
107     void* devicePtr,
108     int incy);
109 
110 cublasStatus_t cublasGetVector (
111     int n,
112     int elemSize,
113     const(void)* x,
114     int incx,
115     void* y,
116     int incy);
117 
118 cublasStatus_t cublasSetMatrix (
119     int rows,
120     int cols,
121     int elemSize,
122     const(void)* A,
123     int lda,
124     void* B,
125     int ldb);
126 
127 cublasStatus_t cublasGetMatrix (
128     int rows,
129     int cols,
130     int elemSize,
131     const(void)* A,
132     int lda,
133     void* B,
134     int ldb);
135 
136 cublasStatus_t cublasSetVectorAsync (
137     int n,
138     int elemSize,
139     const(void)* hostPtr,
140     int incx,
141     void* devicePtr,
142     int incy,
143     cudaStream_t stream);
144 
145 cublasStatus_t cublasGetVectorAsync (
146     int n,
147     int elemSize,
148     const(void)* devicePtr,
149     int incx,
150     void* hostPtr,
151     int incy,
152     cudaStream_t stream);
153 
154 
155 cublasStatus_t cublasSetMatrixAsync (
156     int rows,
157     int cols,
158     int elemSize,
159     const(void)* A,
160     int lda,
161     void* B,
162     int ldb,
163     cudaStream_t stream);
164 
165 cublasStatus_t cublasGetMatrixAsync (
166     int rows,
167     int cols,
168     int elemSize,
169     const(void)* A,
170     int lda,
171     void* B,
172     int ldb,
173     cudaStream_t stream);
174 
175 void cublasXerbla (const(char)* srName, int info);
176 /* ---------------- CUBLAS BLAS1 functions ---------------- */
177 cublasStatus_t cublasSnrm2_v2 (
178     cublasHandle_t handle,
179     int n,
180     const(float)* x,
181     int incx,
182     float* result); /* host or device pointer */
183 
184 cublasStatus_t cublasDnrm2_v2 (
185     cublasHandle_t handle,
186     int n,
187     const(double)* x,
188     int incx,
189     double* result); /* host or device pointer */
190 
191 cublasStatus_t cublasScnrm2_v2 (
192     cublasHandle_t handle,
193     int n,
194     const(cuComplex)* x,
195     int incx,
196     float* result); /* host or device pointer */
197 
198 cublasStatus_t cublasDznrm2_v2 (
199     cublasHandle_t handle,
200     int n,
201     const(cuDoubleComplex)* x,
202     int incx,
203     double* result); /* host or device pointer */
204 
205 cublasStatus_t cublasSdot_v2 (
206     cublasHandle_t handle,
207     int n,
208     const(float)* x,
209     int incx,
210     const(float)* y,
211     int incy,
212     float* result); /* host or device pointer */
213 
214 cublasStatus_t cublasDdot_v2 (
215     cublasHandle_t handle,
216     int n,
217     const(double)* x,
218     int incx,
219     const(double)* y,
220     int incy,
221     double* result); /* host or device pointer */
222 
223 cublasStatus_t cublasCdotu_v2 (
224     cublasHandle_t handle,
225     int n,
226     const(cuComplex)* x,
227     int incx,
228     const(cuComplex)* y,
229     int incy,
230     cuComplex* result); /* host or device pointer */
231 
232 cublasStatus_t cublasCdotc_v2 (
233     cublasHandle_t handle,
234     int n,
235     const(cuComplex)* x,
236     int incx,
237     const(cuComplex)* y,
238     int incy,
239     cuComplex* result); /* host or device pointer */
240 
241 cublasStatus_t cublasZdotu_v2 (
242     cublasHandle_t handle,
243     int n,
244     const(cuDoubleComplex)* x,
245     int incx,
246     const(cuDoubleComplex)* y,
247     int incy,
248     cuDoubleComplex* result); /* host or device pointer */
249 
250 cublasStatus_t cublasZdotc_v2 (
251     cublasHandle_t handle,
252     int n,
253     const(cuDoubleComplex)* x,
254     int incx,
255     const(cuDoubleComplex)* y,
256     int incy,
257     cuDoubleComplex* result); /* host or device pointer */
258 
259 /* host or device pointer */
260 cublasStatus_t cublasSscal_v2 (
261     cublasHandle_t handle,
262     int n,
263     const(float)* alpha,
264     float* x,
265     int incx);
266 
267 /* host or device pointer */
268 cublasStatus_t cublasDscal_v2 (
269     cublasHandle_t handle,
270     int n,
271     const(double)* alpha,
272     double* x,
273     int incx);
274 
275 /* host or device pointer */
276 cublasStatus_t cublasCscal_v2 (
277     cublasHandle_t handle,
278     int n,
279     const(cuComplex)* alpha,
280     cuComplex* x,
281     int incx);
282 
283 /* host or device pointer */
284 cublasStatus_t cublasCsscal_v2 (
285     cublasHandle_t handle,
286     int n,
287     const(float)* alpha,
288     cuComplex* x,
289     int incx);
290 
291 /* host or device pointer */
292 cublasStatus_t cublasZscal_v2 (
293     cublasHandle_t handle,
294     int n,
295     const(cuDoubleComplex)* alpha,
296     cuDoubleComplex* x,
297     int incx);
298 
299 /* host or device pointer */
300 cublasStatus_t cublasZdscal_v2 (
301     cublasHandle_t handle,
302     int n,
303     const(double)* alpha,
304     cuDoubleComplex* x,
305     int incx);
306 
307 /* host or device pointer */
308 cublasStatus_t cublasSaxpy_v2 (
309     cublasHandle_t handle,
310     int n,
311     const(float)* alpha,
312     const(float)* x,
313     int incx,
314     float* y,
315     int incy);
316 
317 /* host or device pointer */
318 cublasStatus_t cublasDaxpy_v2 (
319     cublasHandle_t handle,
320     int n,
321     const(double)* alpha,
322     const(double)* x,
323     int incx,
324     double* y,
325     int incy);
326 
327 /* host or device pointer */
328 cublasStatus_t cublasCaxpy_v2 (
329     cublasHandle_t handle,
330     int n,
331     const(cuComplex)* alpha,
332     const(cuComplex)* x,
333     int incx,
334     cuComplex* y,
335     int incy);
336 
337 /* host or device pointer */
338 cublasStatus_t cublasZaxpy_v2 (
339     cublasHandle_t handle,
340     int n,
341     const(cuDoubleComplex)* alpha,
342     const(cuDoubleComplex)* x,
343     int incx,
344     cuDoubleComplex* y,
345     int incy);
346 
347 cublasStatus_t cublasScopy_v2 (
348     cublasHandle_t handle,
349     int n,
350     const(float)* x,
351     int incx,
352     float* y,
353     int incy);
354 
355 cublasStatus_t cublasDcopy_v2 (
356     cublasHandle_t handle,
357     int n,
358     const(double)* x,
359     int incx,
360     double* y,
361     int incy);
362 
363 cublasStatus_t cublasCcopy_v2 (
364     cublasHandle_t handle,
365     int n,
366     const(cuComplex)* x,
367     int incx,
368     cuComplex* y,
369     int incy);
370 
371 cublasStatus_t cublasZcopy_v2 (
372     cublasHandle_t handle,
373     int n,
374     const(cuDoubleComplex)* x,
375     int incx,
376     cuDoubleComplex* y,
377     int incy);
378 
379 cublasStatus_t cublasSswap_v2 (
380     cublasHandle_t handle,
381     int n,
382     float* x,
383     int incx,
384     float* y,
385     int incy);
386 
387 cublasStatus_t cublasDswap_v2 (
388     cublasHandle_t handle,
389     int n,
390     double* x,
391     int incx,
392     double* y,
393     int incy);
394 
395 cublasStatus_t cublasCswap_v2 (
396     cublasHandle_t handle,
397     int n,
398     cuComplex* x,
399     int incx,
400     cuComplex* y,
401     int incy);
402 
403 cublasStatus_t cublasZswap_v2 (
404     cublasHandle_t handle,
405     int n,
406     cuDoubleComplex* x,
407     int incx,
408     cuDoubleComplex* y,
409     int incy);
410 
411 cublasStatus_t cublasIsamax_v2 (
412     cublasHandle_t handle,
413     int n,
414     const(float)* x,
415     int incx,
416     int* result); /* host or device pointer */
417 
418 cublasStatus_t cublasIdamax_v2 (
419     cublasHandle_t handle,
420     int n,
421     const(double)* x,
422     int incx,
423     int* result); /* host or device pointer */
424 
425 cublasStatus_t cublasIcamax_v2 (
426     cublasHandle_t handle,
427     int n,
428     const(cuComplex)* x,
429     int incx,
430     int* result); /* host or device pointer */
431 
432 cublasStatus_t cublasIzamax_v2 (
433     cublasHandle_t handle,
434     int n,
435     const(cuDoubleComplex)* x,
436     int incx,
437     int* result); /* host or device pointer */
438 
439 cublasStatus_t cublasIsamin_v2 (
440     cublasHandle_t handle,
441     int n,
442     const(float)* x,
443     int incx,
444     int* result); /* host or device pointer */
445 
446 cublasStatus_t cublasIdamin_v2 (
447     cublasHandle_t handle,
448     int n,
449     const(double)* x,
450     int incx,
451     int* result); /* host or device pointer */
452 
453 cublasStatus_t cublasIcamin_v2 (
454     cublasHandle_t handle,
455     int n,
456     const(cuComplex)* x,
457     int incx,
458     int* result); /* host or device pointer */
459 
460 cublasStatus_t cublasIzamin_v2 (
461     cublasHandle_t handle,
462     int n,
463     const(cuDoubleComplex)* x,
464     int incx,
465     int* result); /* host or device pointer */
466 
467 cublasStatus_t cublasSasum_v2 (
468     cublasHandle_t handle,
469     int n,
470     const(float)* x,
471     int incx,
472     float* result); /* host or device pointer */
473 
474 cublasStatus_t cublasDasum_v2 (
475     cublasHandle_t handle,
476     int n,
477     const(double)* x,
478     int incx,
479     double* result); /* host or device pointer */
480 
481 cublasStatus_t cublasScasum_v2 (
482     cublasHandle_t handle,
483     int n,
484     const(cuComplex)* x,
485     int incx,
486     float* result); /* host or device pointer */
487 
488 cublasStatus_t cublasDzasum_v2 (
489     cublasHandle_t handle,
490     int n,
491     const(cuDoubleComplex)* x,
492     int incx,
493     double* result); /* host or device pointer */
494 
495 /* host or device pointer */
496 cublasStatus_t cublasSrot_v2 (
497     cublasHandle_t handle,
498     int n,
499     float* x,
500     int incx,
501     float* y,
502     int incy,
503     const(float)* c,
504     const(float)* s); /* host or device pointer */
505 
506 /* host or device pointer */
507 cublasStatus_t cublasDrot_v2 (
508     cublasHandle_t handle,
509     int n,
510     double* x,
511     int incx,
512     double* y,
513     int incy,
514     const(double)* c,
515     const(double)* s); /* host or device pointer */
516 
517 /* host or device pointer */
518 cublasStatus_t cublasCrot_v2 (
519     cublasHandle_t handle,
520     int n,
521     cuComplex* x,
522     int incx,
523     cuComplex* y,
524     int incy,
525     const(float)* c,
526     const(cuComplex)* s); /* host or device pointer */
527 
528 /* host or device pointer */
529 cublasStatus_t cublasCsrot_v2 (
530     cublasHandle_t handle,
531     int n,
532     cuComplex* x,
533     int incx,
534     cuComplex* y,
535     int incy,
536     const(float)* c,
537     const(float)* s); /* host or device pointer */
538 
539 /* host or device pointer */
540 cublasStatus_t cublasZrot_v2 (
541     cublasHandle_t handle,
542     int n,
543     cuDoubleComplex* x,
544     int incx,
545     cuDoubleComplex* y,
546     int incy,
547     const(double)* c,
548     const(cuDoubleComplex)* s); /* host or device pointer */
549 
550 /* host or device pointer */
551 cublasStatus_t cublasZdrot_v2 (
552     cublasHandle_t handle,
553     int n,
554     cuDoubleComplex* x,
555     int incx,
556     cuDoubleComplex* y,
557     int incy,
558     const(double)* c,
559     const(double)* s); /* host or device pointer */
560 
561 /* host or device pointer */
562 /* host or device pointer */
563 /* host or device pointer */
564 cublasStatus_t cublasSrotg_v2 (
565     cublasHandle_t handle,
566     float* a,
567     float* b,
568     float* c,
569     float* s); /* host or device pointer */
570 
571 /* host or device pointer */
572 /* host or device pointer */
573 /* host or device pointer */
574 cublasStatus_t cublasDrotg_v2 (
575     cublasHandle_t handle,
576     double* a,
577     double* b,
578     double* c,
579     double* s); /* host or device pointer */
580 
581 /* host or device pointer */
582 /* host or device pointer */
583 /* host or device pointer */
584 cublasStatus_t cublasCrotg_v2 (
585     cublasHandle_t handle,
586     cuComplex* a,
587     cuComplex* b,
588     float* c,
589     cuComplex* s); /* host or device pointer */
590 
591 /* host or device pointer */
592 /* host or device pointer */
593 /* host or device pointer */
594 cublasStatus_t cublasZrotg_v2 (
595     cublasHandle_t handle,
596     cuDoubleComplex* a,
597     cuDoubleComplex* b,
598     double* c,
599     cuDoubleComplex* s); /* host or device pointer */
600 
601 cublasStatus_t cublasSrotm_v2 (
602     cublasHandle_t handle,
603     int n,
604     float* x,
605     int incx,
606     float* y,
607     int incy,
608     const(float)* param); /* host or device pointer */
609 
610 cublasStatus_t cublasDrotm_v2 (
611     cublasHandle_t handle,
612     int n,
613     double* x,
614     int incx,
615     double* y,
616     int incy,
617     const(double)* param); /* host or device pointer */
618 
619 /* host or device pointer */
620 /* host or device pointer */
621 /* host or device pointer */
622 /* host or device pointer */
623 cublasStatus_t cublasSrotmg_v2 (
624     cublasHandle_t handle,
625     float* d1,
626     float* d2,
627     float* x1,
628     const(float)* y1,
629     float* param); /* host or device pointer */
630 
631 /* host or device pointer */
632 /* host or device pointer */
633 /* host or device pointer */
634 /* host or device pointer */
635 cublasStatus_t cublasDrotmg_v2 (
636     cublasHandle_t handle,
637     double* d1,
638     double* d2,
639     double* x1,
640     const(double)* y1,
641     double* param
642     );
643 
644 /* host or device pointer */
645 
646 /* --------------- CUBLAS BLAS2 functions  ---------------- */
647 
648 /* GEMV */
649 
650 /* host or device pointer */
651 
652 /* host or device pointer */
653 cublasStatus_t cublasSgemv_v2 (
654     cublasHandle_t handle,
655     cublasOperation_t trans,
656     int m,
657     int n,
658     const(float)* alpha,
659     const(float)* A,
660     int lda,
661     const(float)* x,
662     int incx,
663     const(float)* beta,
664     float* y,
665     int incy);
666 
667 /* host or device pointer */
668 
669 /* host or device pointer */
670 cublasStatus_t cublasDgemv_v2 (
671     cublasHandle_t handle,
672     cublasOperation_t trans,
673     int m,
674     int n,
675     const(double)* alpha,
676     const(double)* A,
677     int lda,
678     const(double)* x,
679     int incx,
680     const(double)* beta,
681     double* y,
682     int incy);
683 
684 /* host or device pointer */
685 
686 /* host or device pointer */
687 cublasStatus_t cublasCgemv_v2 (
688     cublasHandle_t handle,
689     cublasOperation_t trans,
690     int m,
691     int n,
692     const(cuComplex)* alpha,
693     const(cuComplex)* A,
694     int lda,
695     const(cuComplex)* x,
696     int incx,
697     const(cuComplex)* beta,
698     cuComplex* y,
699     int incy);
700 
701 /* host or device pointer */
702 
703 /* host or device pointer */
704 cublasStatus_t cublasZgemv_v2 (
705     cublasHandle_t handle,
706     cublasOperation_t trans,
707     int m,
708     int n,
709     const(cuDoubleComplex)* alpha,
710     const(cuDoubleComplex)* A,
711     int lda,
712     const(cuDoubleComplex)* x,
713     int incx,
714     const(cuDoubleComplex)* beta,
715     cuDoubleComplex* y,
716     int incy);
717 
718 /* GBMV */
719 
720 /* host or device pointer */
721 
722 /* host or device pointer */
723 cublasStatus_t cublasSgbmv_v2 (
724     cublasHandle_t handle,
725     cublasOperation_t trans,
726     int m,
727     int n,
728     int kl,
729     int ku,
730     const(float)* alpha,
731     const(float)* A,
732     int lda,
733     const(float)* x,
734     int incx,
735     const(float)* beta,
736     float* y,
737     int incy);
738 
739 /* host or device pointer */
740 
741 /* host or device pointer */
742 cublasStatus_t cublasDgbmv_v2 (
743     cublasHandle_t handle,
744     cublasOperation_t trans,
745     int m,
746     int n,
747     int kl,
748     int ku,
749     const(double)* alpha,
750     const(double)* A,
751     int lda,
752     const(double)* x,
753     int incx,
754     const(double)* beta,
755     double* y,
756     int incy);
757 
758 /* host or device pointer */
759 
760 /* host or device pointer */
761 cublasStatus_t cublasCgbmv_v2 (
762     cublasHandle_t handle,
763     cublasOperation_t trans,
764     int m,
765     int n,
766     int kl,
767     int ku,
768     const(cuComplex)* alpha,
769     const(cuComplex)* A,
770     int lda,
771     const(cuComplex)* x,
772     int incx,
773     const(cuComplex)* beta,
774     cuComplex* y,
775     int incy);
776 
777 /* host or device pointer */
778 
779 /* host or device pointer */
780 cublasStatus_t cublasZgbmv_v2 (
781     cublasHandle_t handle,
782     cublasOperation_t trans,
783     int m,
784     int n,
785     int kl,
786     int ku,
787     const(cuDoubleComplex)* alpha,
788     const(cuDoubleComplex)* A,
789     int lda,
790     const(cuDoubleComplex)* x,
791     int incx,
792     const(cuDoubleComplex)* beta,
793     cuDoubleComplex* y,
794     int incy);
795 
796 /* TRMV */
797 cublasStatus_t cublasStrmv_v2 (
798     cublasHandle_t handle,
799     cublasFillMode_t uplo,
800     cublasOperation_t trans,
801     cublasDiagType_t diag,
802     int n,
803     const(float)* A,
804     int lda,
805     float* x,
806     int incx);
807 
808 cublasStatus_t cublasDtrmv_v2 (
809     cublasHandle_t handle,
810     cublasFillMode_t uplo,
811     cublasOperation_t trans,
812     cublasDiagType_t diag,
813     int n,
814     const(double)* A,
815     int lda,
816     double* x,
817     int incx);
818 
819 cublasStatus_t cublasCtrmv_v2 (
820     cublasHandle_t handle,
821     cublasFillMode_t uplo,
822     cublasOperation_t trans,
823     cublasDiagType_t diag,
824     int n,
825     const(cuComplex)* A,
826     int lda,
827     cuComplex* x,
828     int incx);
829 
830 cublasStatus_t cublasZtrmv_v2 (
831     cublasHandle_t handle,
832     cublasFillMode_t uplo,
833     cublasOperation_t trans,
834     cublasDiagType_t diag,
835     int n,
836     const(cuDoubleComplex)* A,
837     int lda,
838     cuDoubleComplex* x,
839     int incx);
840 
841 /* TBMV */
842 cublasStatus_t cublasStbmv_v2 (
843     cublasHandle_t handle,
844     cublasFillMode_t uplo,
845     cublasOperation_t trans,
846     cublasDiagType_t diag,
847     int n,
848     int k,
849     const(float)* A,
850     int lda,
851     float* x,
852     int incx);
853 
854 cublasStatus_t cublasDtbmv_v2 (
855     cublasHandle_t handle,
856     cublasFillMode_t uplo,
857     cublasOperation_t trans,
858     cublasDiagType_t diag,
859     int n,
860     int k,
861     const(double)* A,
862     int lda,
863     double* x,
864     int incx);
865 
866 cublasStatus_t cublasCtbmv_v2 (
867     cublasHandle_t handle,
868     cublasFillMode_t uplo,
869     cublasOperation_t trans,
870     cublasDiagType_t diag,
871     int n,
872     int k,
873     const(cuComplex)* A,
874     int lda,
875     cuComplex* x,
876     int incx);
877 
878 cublasStatus_t cublasZtbmv_v2 (
879     cublasHandle_t handle,
880     cublasFillMode_t uplo,
881     cublasOperation_t trans,
882     cublasDiagType_t diag,
883     int n,
884     int k,
885     const(cuDoubleComplex)* A,
886     int lda,
887     cuDoubleComplex* x,
888     int incx);
889 
890 /* TPMV */
891 cublasStatus_t cublasStpmv_v2 (
892     cublasHandle_t handle,
893     cublasFillMode_t uplo,
894     cublasOperation_t trans,
895     cublasDiagType_t diag,
896     int n,
897     const(float)* AP,
898     float* x,
899     int incx);
900 
901 cublasStatus_t cublasDtpmv_v2 (
902     cublasHandle_t handle,
903     cublasFillMode_t uplo,
904     cublasOperation_t trans,
905     cublasDiagType_t diag,
906     int n,
907     const(double)* AP,
908     double* x,
909     int incx);
910 
911 cublasStatus_t cublasCtpmv_v2 (
912     cublasHandle_t handle,
913     cublasFillMode_t uplo,
914     cublasOperation_t trans,
915     cublasDiagType_t diag,
916     int n,
917     const(cuComplex)* AP,
918     cuComplex* x,
919     int incx);
920 
921 cublasStatus_t cublasZtpmv_v2 (
922     cublasHandle_t handle,
923     cublasFillMode_t uplo,
924     cublasOperation_t trans,
925     cublasDiagType_t diag,
926     int n,
927     const(cuDoubleComplex)* AP,
928     cuDoubleComplex* x,
929     int incx);
930 
931 /* TRSV */
932 cublasStatus_t cublasStrsv_v2 (
933     cublasHandle_t handle,
934     cublasFillMode_t uplo,
935     cublasOperation_t trans,
936     cublasDiagType_t diag,
937     int n,
938     const(float)* A,
939     int lda,
940     float* x,
941     int incx);
942 
943 cublasStatus_t cublasDtrsv_v2 (
944     cublasHandle_t handle,
945     cublasFillMode_t uplo,
946     cublasOperation_t trans,
947     cublasDiagType_t diag,
948     int n,
949     const(double)* A,
950     int lda,
951     double* x,
952     int incx);
953 
954 cublasStatus_t cublasCtrsv_v2 (
955     cublasHandle_t handle,
956     cublasFillMode_t uplo,
957     cublasOperation_t trans,
958     cublasDiagType_t diag,
959     int n,
960     const(cuComplex)* A,
961     int lda,
962     cuComplex* x,
963     int incx);
964 
965 cublasStatus_t cublasZtrsv_v2 (
966     cublasHandle_t handle,
967     cublasFillMode_t uplo,
968     cublasOperation_t trans,
969     cublasDiagType_t diag,
970     int n,
971     const(cuDoubleComplex)* A,
972     int lda,
973     cuDoubleComplex* x,
974     int incx);
975 
976 /* TPSV */
977 cublasStatus_t cublasStpsv_v2 (
978     cublasHandle_t handle,
979     cublasFillMode_t uplo,
980     cublasOperation_t trans,
981     cublasDiagType_t diag,
982     int n,
983     const(float)* AP,
984     float* x,
985     int incx);
986 
987 cublasStatus_t cublasDtpsv_v2 (
988     cublasHandle_t handle,
989     cublasFillMode_t uplo,
990     cublasOperation_t trans,
991     cublasDiagType_t diag,
992     int n,
993     const(double)* AP,
994     double* x,
995     int incx);
996 
997 cublasStatus_t cublasCtpsv_v2 (
998     cublasHandle_t handle,
999     cublasFillMode_t uplo,
1000     cublasOperation_t trans,
1001     cublasDiagType_t diag,
1002     int n,
1003     const(cuComplex)* AP,
1004     cuComplex* x,
1005     int incx);
1006 
1007 cublasStatus_t cublasZtpsv_v2 (
1008     cublasHandle_t handle,
1009     cublasFillMode_t uplo,
1010     cublasOperation_t trans,
1011     cublasDiagType_t diag,
1012     int n,
1013     const(cuDoubleComplex)* AP,
1014     cuDoubleComplex* x,
1015     int incx);
1016 
1017 /* TBSV */
1018 cublasStatus_t cublasStbsv_v2 (
1019     cublasHandle_t handle,
1020     cublasFillMode_t uplo,
1021     cublasOperation_t trans,
1022     cublasDiagType_t diag,
1023     int n,
1024     int k,
1025     const(float)* A,
1026     int lda,
1027     float* x,
1028     int incx);
1029 
1030 cublasStatus_t cublasDtbsv_v2 (
1031     cublasHandle_t handle,
1032     cublasFillMode_t uplo,
1033     cublasOperation_t trans,
1034     cublasDiagType_t diag,
1035     int n,
1036     int k,
1037     const(double)* A,
1038     int lda,
1039     double* x,
1040     int incx);
1041 
1042 cublasStatus_t cublasCtbsv_v2 (
1043     cublasHandle_t handle,
1044     cublasFillMode_t uplo,
1045     cublasOperation_t trans,
1046     cublasDiagType_t diag,
1047     int n,
1048     int k,
1049     const(cuComplex)* A,
1050     int lda,
1051     cuComplex* x,
1052     int incx);
1053 
1054 cublasStatus_t cublasZtbsv_v2 (
1055     cublasHandle_t handle,
1056     cublasFillMode_t uplo,
1057     cublasOperation_t trans,
1058     cublasDiagType_t diag,
1059     int n,
1060     int k,
1061     const(cuDoubleComplex)* A,
1062     int lda,
1063     cuDoubleComplex* x,
1064     int incx);
1065 
1066 /* SYMV/HEMV */
1067 
1068 /* host or device pointer */
1069 
1070 /* host or device pointer */
1071 cublasStatus_t cublasSsymv_v2 (
1072     cublasHandle_t handle,
1073     cublasFillMode_t uplo,
1074     int n,
1075     const(float)* alpha,
1076     const(float)* A,
1077     int lda,
1078     const(float)* x,
1079     int incx,
1080     const(float)* beta,
1081     float* y,
1082     int incy);
1083 
1084 /* host or device pointer */
1085 
1086 /* host or device pointer */
1087 cublasStatus_t cublasDsymv_v2 (
1088     cublasHandle_t handle,
1089     cublasFillMode_t uplo,
1090     int n,
1091     const(double)* alpha,
1092     const(double)* A,
1093     int lda,
1094     const(double)* x,
1095     int incx,
1096     const(double)* beta,
1097     double* y,
1098     int incy);
1099 
1100 /* host or device pointer */
1101 
1102 /* host or device pointer */
1103 cublasStatus_t cublasCsymv_v2 (
1104     cublasHandle_t handle,
1105     cublasFillMode_t uplo,
1106     int n,
1107     const(cuComplex)* alpha,
1108     const(cuComplex)* A,
1109     int lda,
1110     const(cuComplex)* x,
1111     int incx,
1112     const(cuComplex)* beta,
1113     cuComplex* y,
1114     int incy);
1115 
1116 /* host or device pointer */
1117 
1118 /* host or device pointer */
1119 cublasStatus_t cublasZsymv_v2 (
1120     cublasHandle_t handle,
1121     cublasFillMode_t uplo,
1122     int n,
1123     const(cuDoubleComplex)* alpha,
1124     const(cuDoubleComplex)* A,
1125     int lda,
1126     const(cuDoubleComplex)* x,
1127     int incx,
1128     const(cuDoubleComplex)* beta,
1129     cuDoubleComplex* y,
1130     int incy);
1131 
1132 /* host or device pointer */
1133 
1134 /* host or device pointer */
1135 cublasStatus_t cublasChemv_v2 (
1136     cublasHandle_t handle,
1137     cublasFillMode_t uplo,
1138     int n,
1139     const(cuComplex)* alpha,
1140     const(cuComplex)* A,
1141     int lda,
1142     const(cuComplex)* x,
1143     int incx,
1144     const(cuComplex)* beta,
1145     cuComplex* y,
1146     int incy);
1147 
1148 /* host or device pointer */
1149 
1150 /* host or device pointer */
1151 cublasStatus_t cublasZhemv_v2 (
1152     cublasHandle_t handle,
1153     cublasFillMode_t uplo,
1154     int n,
1155     const(cuDoubleComplex)* alpha,
1156     const(cuDoubleComplex)* A,
1157     int lda,
1158     const(cuDoubleComplex)* x,
1159     int incx,
1160     const(cuDoubleComplex)* beta,
1161     cuDoubleComplex* y,
1162     int incy);
1163 
1164 /* SBMV/HBMV */
1165 
1166 /* host or device pointer */
1167 
1168 /* host or device pointer */
1169 cublasStatus_t cublasSsbmv_v2 (
1170     cublasHandle_t handle,
1171     cublasFillMode_t uplo,
1172     int n,
1173     int k,
1174     const(float)* alpha,
1175     const(float)* A,
1176     int lda,
1177     const(float)* x,
1178     int incx,
1179     const(float)* beta,
1180     float* y,
1181     int incy);
1182 
1183 /* host or device pointer */
1184 
1185 /* host or device pointer */
1186 cublasStatus_t cublasDsbmv_v2 (
1187     cublasHandle_t handle,
1188     cublasFillMode_t uplo,
1189     int n,
1190     int k,
1191     const(double)* alpha,
1192     const(double)* A,
1193     int lda,
1194     const(double)* x,
1195     int incx,
1196     const(double)* beta,
1197     double* y,
1198     int incy);
1199 
1200 /* host or device pointer */
1201 
1202 /* host or device pointer */
1203 cublasStatus_t cublasChbmv_v2 (
1204     cublasHandle_t handle,
1205     cublasFillMode_t uplo,
1206     int n,
1207     int k,
1208     const(cuComplex)* alpha,
1209     const(cuComplex)* A,
1210     int lda,
1211     const(cuComplex)* x,
1212     int incx,
1213     const(cuComplex)* beta,
1214     cuComplex* y,
1215     int incy);
1216 
1217 /* host or device pointer */
1218 
1219 /* host or device pointer */
1220 cublasStatus_t cublasZhbmv_v2 (
1221     cublasHandle_t handle,
1222     cublasFillMode_t uplo,
1223     int n,
1224     int k,
1225     const(cuDoubleComplex)* alpha,
1226     const(cuDoubleComplex)* A,
1227     int lda,
1228     const(cuDoubleComplex)* x,
1229     int incx,
1230     const(cuDoubleComplex)* beta,
1231     cuDoubleComplex* y,
1232     int incy);
1233 
1234 /* SPMV/HPMV */
1235 
1236 /* host or device pointer */
1237 
1238 /* host or device pointer */
1239 cublasStatus_t cublasSspmv_v2 (
1240     cublasHandle_t handle,
1241     cublasFillMode_t uplo,
1242     int n,
1243     const(float)* alpha,
1244     const(float)* AP,
1245     const(float)* x,
1246     int incx,
1247     const(float)* beta,
1248     float* y,
1249     int incy);
1250 
1251 /* host or device pointer */
1252 
1253 /* host or device pointer */
1254 cublasStatus_t cublasDspmv_v2 (
1255     cublasHandle_t handle,
1256     cublasFillMode_t uplo,
1257     int n,
1258     const(double)* alpha,
1259     const(double)* AP,
1260     const(double)* x,
1261     int incx,
1262     const(double)* beta,
1263     double* y,
1264     int incy);
1265 
1266 /* host or device pointer */
1267 
1268 /* host or device pointer */
1269 cublasStatus_t cublasChpmv_v2 (
1270     cublasHandle_t handle,
1271     cublasFillMode_t uplo,
1272     int n,
1273     const(cuComplex)* alpha,
1274     const(cuComplex)* AP,
1275     const(cuComplex)* x,
1276     int incx,
1277     const(cuComplex)* beta,
1278     cuComplex* y,
1279     int incy);
1280 
1281 /* host or device pointer */
1282 
1283 /* host or device pointer */
1284 cublasStatus_t cublasZhpmv_v2 (
1285     cublasHandle_t handle,
1286     cublasFillMode_t uplo,
1287     int n,
1288     const(cuDoubleComplex)* alpha,
1289     const(cuDoubleComplex)* AP,
1290     const(cuDoubleComplex)* x,
1291     int incx,
1292     const(cuDoubleComplex)* beta,
1293     cuDoubleComplex* y,
1294     int incy);
1295 
1296 /* GER */
1297 
1298 /* host or device pointer */
1299 cublasStatus_t cublasSger_v2 (
1300     cublasHandle_t handle,
1301     int m,
1302     int n,
1303     const(float)* alpha,
1304     const(float)* x,
1305     int incx,
1306     const(float)* y,
1307     int incy,
1308     float* A,
1309     int lda);
1310 
1311 /* host or device pointer */
1312 cublasStatus_t cublasDger_v2 (
1313     cublasHandle_t handle,
1314     int m,
1315     int n,
1316     const(double)* alpha,
1317     const(double)* x,
1318     int incx,
1319     const(double)* y,
1320     int incy,
1321     double* A,
1322     int lda);
1323 
1324 /* host or device pointer */
1325 cublasStatus_t cublasCgeru_v2 (
1326     cublasHandle_t handle,
1327     int m,
1328     int n,
1329     const(cuComplex)* alpha,
1330     const(cuComplex)* x,
1331     int incx,
1332     const(cuComplex)* y,
1333     int incy,
1334     cuComplex* A,
1335     int lda);
1336 
1337 /* host or device pointer */
1338 cublasStatus_t cublasCgerc_v2 (
1339     cublasHandle_t handle,
1340     int m,
1341     int n,
1342     const(cuComplex)* alpha,
1343     const(cuComplex)* x,
1344     int incx,
1345     const(cuComplex)* y,
1346     int incy,
1347     cuComplex* A,
1348     int lda);
1349 
1350 /* host or device pointer */
1351 cublasStatus_t cublasZgeru_v2 (
1352     cublasHandle_t handle,
1353     int m,
1354     int n,
1355     const(cuDoubleComplex)* alpha,
1356     const(cuDoubleComplex)* x,
1357     int incx,
1358     const(cuDoubleComplex)* y,
1359     int incy,
1360     cuDoubleComplex* A,
1361     int lda);
1362 
1363 /* host or device pointer */
1364 cublasStatus_t cublasZgerc_v2 (
1365     cublasHandle_t handle,
1366     int m,
1367     int n,
1368     const(cuDoubleComplex)* alpha,
1369     const(cuDoubleComplex)* x,
1370     int incx,
1371     const(cuDoubleComplex)* y,
1372     int incy,
1373     cuDoubleComplex* A,
1374     int lda);
1375 
1376 /* SYR/HER */
1377 
1378 /* host or device pointer */
1379 cublasStatus_t cublasSsyr_v2 (
1380     cublasHandle_t handle,
1381     cublasFillMode_t uplo,
1382     int n,
1383     const(float)* alpha,
1384     const(float)* x,
1385     int incx,
1386     float* A,
1387     int lda);
1388 
1389 /* host or device pointer */
1390 cublasStatus_t cublasDsyr_v2 (
1391     cublasHandle_t handle,
1392     cublasFillMode_t uplo,
1393     int n,
1394     const(double)* alpha,
1395     const(double)* x,
1396     int incx,
1397     double* A,
1398     int lda);
1399 
1400 /* host or device pointer */
1401 cublasStatus_t cublasCsyr_v2 (
1402     cublasHandle_t handle,
1403     cublasFillMode_t uplo,
1404     int n,
1405     const(cuComplex)* alpha,
1406     const(cuComplex)* x,
1407     int incx,
1408     cuComplex* A,
1409     int lda);
1410 
1411 /* host or device pointer */
1412 cublasStatus_t cublasZsyr_v2 (
1413     cublasHandle_t handle,
1414     cublasFillMode_t uplo,
1415     int n,
1416     const(cuDoubleComplex)* alpha,
1417     const(cuDoubleComplex)* x,
1418     int incx,
1419     cuDoubleComplex* A,
1420     int lda);
1421 
1422 /* host or device pointer */
1423 cublasStatus_t cublasCher_v2 (
1424     cublasHandle_t handle,
1425     cublasFillMode_t uplo,
1426     int n,
1427     const(float)* alpha,
1428     const(cuComplex)* x,
1429     int incx,
1430     cuComplex* A,
1431     int lda);
1432 
1433 /* host or device pointer */
1434 cublasStatus_t cublasZher_v2 (
1435     cublasHandle_t handle,
1436     cublasFillMode_t uplo,
1437     int n,
1438     const(double)* alpha,
1439     const(cuDoubleComplex)* x,
1440     int incx,
1441     cuDoubleComplex* A,
1442     int lda);
1443 
1444 /* SPR/HPR */
1445 
1446 /* host or device pointer */
1447 cublasStatus_t cublasSspr_v2 (
1448     cublasHandle_t handle,
1449     cublasFillMode_t uplo,
1450     int n,
1451     const(float)* alpha,
1452     const(float)* x,
1453     int incx,
1454     float* AP);
1455 
1456 /* host or device pointer */
1457 cublasStatus_t cublasDspr_v2 (
1458     cublasHandle_t handle,
1459     cublasFillMode_t uplo,
1460     int n,
1461     const(double)* alpha,
1462     const(double)* x,
1463     int incx,
1464     double* AP);
1465 
1466 /* host or device pointer */
1467 cublasStatus_t cublasChpr_v2 (
1468     cublasHandle_t handle,
1469     cublasFillMode_t uplo,
1470     int n,
1471     const(float)* alpha,
1472     const(cuComplex)* x,
1473     int incx,
1474     cuComplex* AP);
1475 
1476 /* host or device pointer */
1477 cublasStatus_t cublasZhpr_v2 (
1478     cublasHandle_t handle,
1479     cublasFillMode_t uplo,
1480     int n,
1481     const(double)* alpha,
1482     const(cuDoubleComplex)* x,
1483     int incx,
1484     cuDoubleComplex* AP);
1485 
1486 /* SYR2/HER2 */
1487 
1488 /* host or device pointer */
1489 cublasStatus_t cublasSsyr2_v2 (
1490     cublasHandle_t handle,
1491     cublasFillMode_t uplo,
1492     int n,
1493     const(float)* alpha,
1494     const(float)* x,
1495     int incx,
1496     const(float)* y,
1497     int incy,
1498     float* A,
1499     int lda);
1500 
1501 /* host or device pointer */
1502 cublasStatus_t cublasDsyr2_v2 (
1503     cublasHandle_t handle,
1504     cublasFillMode_t uplo,
1505     int n,
1506     const(double)* alpha,
1507     const(double)* x,
1508     int incx,
1509     const(double)* y,
1510     int incy,
1511     double* A,
1512     int lda);
1513 
1514 /* host or device pointer */
1515 cublasStatus_t cublasCsyr2_v2 (
1516     cublasHandle_t handle,
1517     cublasFillMode_t uplo,
1518     int n,
1519     const(cuComplex)* alpha,
1520     const(cuComplex)* x,
1521     int incx,
1522     const(cuComplex)* y,
1523     int incy,
1524     cuComplex* A,
1525     int lda);
1526 
1527 /* host or device pointer */
1528 cublasStatus_t cublasZsyr2_v2 (
1529     cublasHandle_t handle,
1530     cublasFillMode_t uplo,
1531     int n,
1532     const(cuDoubleComplex)* alpha,
1533     const(cuDoubleComplex)* x,
1534     int incx,
1535     const(cuDoubleComplex)* y,
1536     int incy,
1537     cuDoubleComplex* A,
1538     int lda);
1539 
1540 /* host or device pointer */
1541 cublasStatus_t cublasCher2_v2 (
1542     cublasHandle_t handle,
1543     cublasFillMode_t uplo,
1544     int n,
1545     const(cuComplex)* alpha,
1546     const(cuComplex)* x,
1547     int incx,
1548     const(cuComplex)* y,
1549     int incy,
1550     cuComplex* A,
1551     int lda);
1552 
1553 /* host or device pointer */
1554 cublasStatus_t cublasZher2_v2 (
1555     cublasHandle_t handle,
1556     cublasFillMode_t uplo,
1557     int n,
1558     const(cuDoubleComplex)* alpha,
1559     const(cuDoubleComplex)* x,
1560     int incx,
1561     const(cuDoubleComplex)* y,
1562     int incy,
1563     cuDoubleComplex* A,
1564     int lda);
1565 
1566 /* SPR2/HPR2 */
1567 
1568 /* host or device pointer */
1569 cublasStatus_t cublasSspr2_v2 (
1570     cublasHandle_t handle,
1571     cublasFillMode_t uplo,
1572     int n,
1573     const(float)* alpha,
1574     const(float)* x,
1575     int incx,
1576     const(float)* y,
1577     int incy,
1578     float* AP);
1579 
1580 /* host or device pointer */
1581 cublasStatus_t cublasDspr2_v2 (
1582     cublasHandle_t handle,
1583     cublasFillMode_t uplo,
1584     int n,
1585     const(double)* alpha,
1586     const(double)* x,
1587     int incx,
1588     const(double)* y,
1589     int incy,
1590     double* AP);
1591 
1592 /* host or device pointer */
1593 cublasStatus_t cublasChpr2_v2 (
1594     cublasHandle_t handle,
1595     cublasFillMode_t uplo,
1596     int n,
1597     const(cuComplex)* alpha,
1598     const(cuComplex)* x,
1599     int incx,
1600     const(cuComplex)* y,
1601     int incy,
1602     cuComplex* AP);
1603 
1604 /* host or device pointer */
1605 cublasStatus_t cublasZhpr2_v2 (
1606     cublasHandle_t handle,
1607     cublasFillMode_t uplo,
1608     int n,
1609     const(cuDoubleComplex)* alpha,
1610     const(cuDoubleComplex)* x,
1611     int incx,
1612     const(cuDoubleComplex)* y,
1613     int incy,
1614     cuDoubleComplex* AP);
1615 
1616 /* ---------------- CUBLAS BLAS3 functions ---------------- */
1617 
1618 /* GEMM */
1619 
1620 /* host or device pointer */
1621 
1622 /* host or device pointer */
1623 cublasStatus_t cublasSgemm_v2 (
1624     cublasHandle_t handle,
1625     cublasOperation_t transa,
1626     cublasOperation_t transb,
1627     int m,
1628     int n,
1629     int k,
1630     const(float)* alpha,
1631     const(float)* A,
1632     int lda,
1633     const(float)* B,
1634     int ldb,
1635     const(float)* beta,
1636     float* C,
1637     int ldc);
1638 
1639 /* host or device pointer */
1640 
1641 /* host or device pointer */
1642 cublasStatus_t cublasDgemm_v2 (
1643     cublasHandle_t handle,
1644     cublasOperation_t transa,
1645     cublasOperation_t transb,
1646     int m,
1647     int n,
1648     int k,
1649     const(double)* alpha,
1650     const(double)* A,
1651     int lda,
1652     const(double)* B,
1653     int ldb,
1654     const(double)* beta,
1655     double* C,
1656     int ldc);
1657 
1658 /* host or device pointer */
1659 
1660 /* host or device pointer */
1661 cublasStatus_t cublasCgemm_v2 (
1662     cublasHandle_t handle,
1663     cublasOperation_t transa,
1664     cublasOperation_t transb,
1665     int m,
1666     int n,
1667     int k,
1668     const(cuComplex)* alpha,
1669     const(cuComplex)* A,
1670     int lda,
1671     const(cuComplex)* B,
1672     int ldb,
1673     const(cuComplex)* beta,
1674     cuComplex* C,
1675     int ldc);
1676 
1677 /* host or device pointer */
1678 
1679 /* host or device pointer */
1680 cublasStatus_t cublasZgemm_v2 (
1681     cublasHandle_t handle,
1682     cublasOperation_t transa,
1683     cublasOperation_t transb,
1684     int m,
1685     int n,
1686     int k,
1687     const(cuDoubleComplex)* alpha,
1688     const(cuDoubleComplex)* A,
1689     int lda,
1690     const(cuDoubleComplex)* B,
1691     int ldb,
1692     const(cuDoubleComplex)* beta,
1693     cuDoubleComplex* C,
1694     int ldc);
1695 
1696 /* host or device pointer */
1697 
1698 /* host or device pointer */
1699 cublasStatus_t cublasHgemm (
1700     cublasHandle_t handle,
1701     cublasOperation_t transa,
1702     cublasOperation_t transb,
1703     int m,
1704     int n,
1705     int k,
1706     const(half)* alpha,
1707     const(half)* A,
1708     int lda,
1709     const(half)* B,
1710     int ldb,
1711     const(half)* beta,
1712     half* C,
1713     int ldc);
1714 
1715 /* IO in FP16/FP32, computation in float */
1716 
1717 /* host or device pointer */
1718 
1719 /* host or device pointer */
1720 cublasStatus_t cublasSgemmEx (
1721     cublasHandle_t handle,
1722     cublasOperation_t transa,
1723     cublasOperation_t transb,
1724     int m,
1725     int n,
1726     int k,
1727     const(float)* alpha,
1728     const(void)* A,
1729     cublasDataType_t Atype,
1730     int lda,
1731     const(void)* B,
1732     cublasDataType_t Btype,
1733     int ldb,
1734     const(float)* beta,
1735     void* C,
1736     cublasDataType_t Ctype,
1737     int ldc);
1738 
1739 /* SYRK */
1740 
1741 /* host or device pointer */
1742 
1743 /* host or device pointer */
1744 cublasStatus_t cublasSsyrk_v2 (
1745     cublasHandle_t handle,
1746     cublasFillMode_t uplo,
1747     cublasOperation_t trans,
1748     int n,
1749     int k,
1750     const(float)* alpha,
1751     const(float)* A,
1752     int lda,
1753     const(float)* beta,
1754     float* C,
1755     int ldc);
1756 
1757 /* host or device pointer */
1758 
1759 /* host or device pointer */
1760 cublasStatus_t cublasDsyrk_v2 (
1761     cublasHandle_t handle,
1762     cublasFillMode_t uplo,
1763     cublasOperation_t trans,
1764     int n,
1765     int k,
1766     const(double)* alpha,
1767     const(double)* A,
1768     int lda,
1769     const(double)* beta,
1770     double* C,
1771     int ldc);
1772 
1773 /* host or device pointer */
1774 
1775 /* host or device pointer */
1776 cublasStatus_t cublasCsyrk_v2 (
1777     cublasHandle_t handle,
1778     cublasFillMode_t uplo,
1779     cublasOperation_t trans,
1780     int n,
1781     int k,
1782     const(cuComplex)* alpha,
1783     const(cuComplex)* A,
1784     int lda,
1785     const(cuComplex)* beta,
1786     cuComplex* C,
1787     int ldc);
1788 
1789 /* host or device pointer */
1790 
1791 /* host or device pointer */
1792 cublasStatus_t cublasZsyrk_v2 (
1793     cublasHandle_t handle,
1794     cublasFillMode_t uplo,
1795     cublasOperation_t trans,
1796     int n,
1797     int k,
1798     const(cuDoubleComplex)* alpha,
1799     const(cuDoubleComplex)* A,
1800     int lda,
1801     const(cuDoubleComplex)* beta,
1802     cuDoubleComplex* C,
1803     int ldc);
1804 
1805 /* HERK */
1806 
1807 /* host or device pointer */
1808 
1809 /* host or device pointer */
1810 cublasStatus_t cublasCherk_v2 (
1811     cublasHandle_t handle,
1812     cublasFillMode_t uplo,
1813     cublasOperation_t trans,
1814     int n,
1815     int k,
1816     const(float)* alpha,
1817     const(cuComplex)* A,
1818     int lda,
1819     const(float)* beta,
1820     cuComplex* C,
1821     int ldc);
1822 
1823 /* host or device pointer */
1824 
1825 /* host or device pointer */
1826 cublasStatus_t cublasZherk_v2 (
1827     cublasHandle_t handle,
1828     cublasFillMode_t uplo,
1829     cublasOperation_t trans,
1830     int n,
1831     int k,
1832     const(double)* alpha,
1833     const(cuDoubleComplex)* A,
1834     int lda,
1835     const(double)* beta,
1836     cuDoubleComplex* C,
1837     int ldc);
1838 
1839 /* SYR2K */
1840 
1841 /* host or device pointer */
1842 
1843 /* host or device pointer */
1844 cublasStatus_t cublasSsyr2k_v2 (
1845     cublasHandle_t handle,
1846     cublasFillMode_t uplo,
1847     cublasOperation_t trans,
1848     int n,
1849     int k,
1850     const(float)* alpha,
1851     const(float)* A,
1852     int lda,
1853     const(float)* B,
1854     int ldb,
1855     const(float)* beta,
1856     float* C,
1857     int ldc);
1858 
1859 /* host or device pointer */
1860 
1861 /* host or device pointer */
1862 cublasStatus_t cublasDsyr2k_v2 (
1863     cublasHandle_t handle,
1864     cublasFillMode_t uplo,
1865     cublasOperation_t trans,
1866     int n,
1867     int k,
1868     const(double)* alpha,
1869     const(double)* A,
1870     int lda,
1871     const(double)* B,
1872     int ldb,
1873     const(double)* beta,
1874     double* C,
1875     int ldc);
1876 
1877 /* host or device pointer */
1878 
1879 /* host or device pointer */
1880 cublasStatus_t cublasCsyr2k_v2 (
1881     cublasHandle_t handle,
1882     cublasFillMode_t uplo,
1883     cublasOperation_t trans,
1884     int n,
1885     int k,
1886     const(cuComplex)* alpha,
1887     const(cuComplex)* A,
1888     int lda,
1889     const(cuComplex)* B,
1890     int ldb,
1891     const(cuComplex)* beta,
1892     cuComplex* C,
1893     int ldc);
1894 
1895 /* host or device pointer */
1896 
1897 /* host or device pointer */
1898 cublasStatus_t cublasZsyr2k_v2 (
1899     cublasHandle_t handle,
1900     cublasFillMode_t uplo,
1901     cublasOperation_t trans,
1902     int n,
1903     int k,
1904     const(cuDoubleComplex)* alpha,
1905     const(cuDoubleComplex)* A,
1906     int lda,
1907     const(cuDoubleComplex)* B,
1908     int ldb,
1909     const(cuDoubleComplex)* beta,
1910     cuDoubleComplex* C,
1911     int ldc);
1912 
1913 /* HER2K */
1914 
1915 /* host or device pointer */
1916 
1917 /* host or device pointer */
1918 cublasStatus_t cublasCher2k_v2 (
1919     cublasHandle_t handle,
1920     cublasFillMode_t uplo,
1921     cublasOperation_t trans,
1922     int n,
1923     int k,
1924     const(cuComplex)* alpha,
1925     const(cuComplex)* A,
1926     int lda,
1927     const(cuComplex)* B,
1928     int ldb,
1929     const(float)* beta,
1930     cuComplex* C,
1931     int ldc);
1932 
1933 /* host or device pointer */
1934 
1935 /* host or device pointer */
1936 cublasStatus_t cublasZher2k_v2 (
1937     cublasHandle_t handle,
1938     cublasFillMode_t uplo,
1939     cublasOperation_t trans,
1940     int n,
1941     int k,
1942     const(cuDoubleComplex)* alpha,
1943     const(cuDoubleComplex)* A,
1944     int lda,
1945     const(cuDoubleComplex)* B,
1946     int ldb,
1947     const(double)* beta,
1948     cuDoubleComplex* C,
1949     int ldc);
1950 
1951 /* SYRKX : eXtended SYRK*/
1952 
1953 /* host or device pointer */
1954 
1955 /* host or device pointer */
1956 cublasStatus_t cublasSsyrkx (
1957     cublasHandle_t handle,
1958     cublasFillMode_t uplo,
1959     cublasOperation_t trans,
1960     int n,
1961     int k,
1962     const(float)* alpha,
1963     const(float)* A,
1964     int lda,
1965     const(float)* B,
1966     int ldb,
1967     const(float)* beta,
1968     float* C,
1969     int ldc);
1970 
1971 /* host or device pointer */
1972 
1973 /* host or device pointer */
1974 cublasStatus_t cublasDsyrkx (
1975     cublasHandle_t handle,
1976     cublasFillMode_t uplo,
1977     cublasOperation_t trans,
1978     int n,
1979     int k,
1980     const(double)* alpha,
1981     const(double)* A,
1982     int lda,
1983     const(double)* B,
1984     int ldb,
1985     const(double)* beta,
1986     double* C,
1987     int ldc);
1988 
1989 /* host or device pointer */
1990 
1991 /* host or device pointer */
1992 cublasStatus_t cublasCsyrkx (
1993     cublasHandle_t handle,
1994     cublasFillMode_t uplo,
1995     cublasOperation_t trans,
1996     int n,
1997     int k,
1998     const(cuComplex)* alpha,
1999     const(cuComplex)* A,
2000     int lda,
2001     const(cuComplex)* B,
2002     int ldb,
2003     const(cuComplex)* beta,
2004     cuComplex* C,
2005     int ldc);
2006 
2007 /* host or device pointer */
2008 
2009 /* host or device pointer */
2010 cublasStatus_t cublasZsyrkx (
2011     cublasHandle_t handle,
2012     cublasFillMode_t uplo,
2013     cublasOperation_t trans,
2014     int n,
2015     int k,
2016     const(cuDoubleComplex)* alpha,
2017     const(cuDoubleComplex)* A,
2018     int lda,
2019     const(cuDoubleComplex)* B,
2020     int ldb,
2021     const(cuDoubleComplex)* beta,
2022     cuDoubleComplex* C,
2023     int ldc);
2024 
2025 /* HERKX : eXtended HERK */
2026 
2027 /* host or device pointer */
2028 
2029 /* host or device pointer */
2030 cublasStatus_t cublasCherkx (
2031     cublasHandle_t handle,
2032     cublasFillMode_t uplo,
2033     cublasOperation_t trans,
2034     int n,
2035     int k,
2036     const(cuComplex)* alpha,
2037     const(cuComplex)* A,
2038     int lda,
2039     const(cuComplex)* B,
2040     int ldb,
2041     const(float)* beta,
2042     cuComplex* C,
2043     int ldc);
2044 
2045 /* host or device pointer */
2046 
2047 /* host or device pointer */
2048 cublasStatus_t cublasZherkx (
2049     cublasHandle_t handle,
2050     cublasFillMode_t uplo,
2051     cublasOperation_t trans,
2052     int n,
2053     int k,
2054     const(cuDoubleComplex)* alpha,
2055     const(cuDoubleComplex)* A,
2056     int lda,
2057     const(cuDoubleComplex)* B,
2058     int ldb,
2059     const(double)* beta,
2060     cuDoubleComplex* C,
2061     int ldc);
2062 
2063 /* SYMM */
2064 
2065 /* host or device pointer */
2066 
2067 /* host or device pointer */
2068 cublasStatus_t cublasSsymm_v2 (
2069     cublasHandle_t handle,
2070     cublasSideMode_t side,
2071     cublasFillMode_t uplo,
2072     int m,
2073     int n,
2074     const(float)* alpha,
2075     const(float)* A,
2076     int lda,
2077     const(float)* B,
2078     int ldb,
2079     const(float)* beta,
2080     float* C,
2081     int ldc);
2082 
2083 /* host or device pointer */
2084 
2085 /* host or device pointer */
2086 cublasStatus_t cublasDsymm_v2 (
2087     cublasHandle_t handle,
2088     cublasSideMode_t side,
2089     cublasFillMode_t uplo,
2090     int m,
2091     int n,
2092     const(double)* alpha,
2093     const(double)* A,
2094     int lda,
2095     const(double)* B,
2096     int ldb,
2097     const(double)* beta,
2098     double* C,
2099     int ldc);
2100 
2101 /* host or device pointer */
2102 
2103 /* host or device pointer */
2104 cublasStatus_t cublasCsymm_v2 (
2105     cublasHandle_t handle,
2106     cublasSideMode_t side,
2107     cublasFillMode_t uplo,
2108     int m,
2109     int n,
2110     const(cuComplex)* alpha,
2111     const(cuComplex)* A,
2112     int lda,
2113     const(cuComplex)* B,
2114     int ldb,
2115     const(cuComplex)* beta,
2116     cuComplex* C,
2117     int ldc);
2118 
2119 /* host or device pointer */
2120 
2121 /* host or device pointer */
2122 cublasStatus_t cublasZsymm_v2 (
2123     cublasHandle_t handle,
2124     cublasSideMode_t side,
2125     cublasFillMode_t uplo,
2126     int m,
2127     int n,
2128     const(cuDoubleComplex)* alpha,
2129     const(cuDoubleComplex)* A,
2130     int lda,
2131     const(cuDoubleComplex)* B,
2132     int ldb,
2133     const(cuDoubleComplex)* beta,
2134     cuDoubleComplex* C,
2135     int ldc);
2136 
2137 /* HEMM */
2138 
2139 /* host or device pointer */
2140 
2141 /* host or device pointer */
2142 cublasStatus_t cublasChemm_v2 (
2143     cublasHandle_t handle,
2144     cublasSideMode_t side,
2145     cublasFillMode_t uplo,
2146     int m,
2147     int n,
2148     const(cuComplex)* alpha,
2149     const(cuComplex)* A,
2150     int lda,
2151     const(cuComplex)* B,
2152     int ldb,
2153     const(cuComplex)* beta,
2154     cuComplex* C,
2155     int ldc);
2156 
2157 /* host or device pointer */
2158 
2159 /* host or device pointer */
2160 cublasStatus_t cublasZhemm_v2 (
2161     cublasHandle_t handle,
2162     cublasSideMode_t side,
2163     cublasFillMode_t uplo,
2164     int m,
2165     int n,
2166     const(cuDoubleComplex)* alpha,
2167     const(cuDoubleComplex)* A,
2168     int lda,
2169     const(cuDoubleComplex)* B,
2170     int ldb,
2171     const(cuDoubleComplex)* beta,
2172     cuDoubleComplex* C,
2173     int ldc);
2174 
2175 /* TRSM */
2176 
2177 /* host or device pointer */
2178 cublasStatus_t cublasStrsm_v2 (
2179     cublasHandle_t handle,
2180     cublasSideMode_t side,
2181     cublasFillMode_t uplo,
2182     cublasOperation_t trans,
2183     cublasDiagType_t diag,
2184     int m,
2185     int n,
2186     const(float)* alpha,
2187     const(float)* A,
2188     int lda,
2189     float* B,
2190     int ldb);
2191 
2192 /* host or device pointer */
2193 cublasStatus_t cublasDtrsm_v2 (
2194     cublasHandle_t handle,
2195     cublasSideMode_t side,
2196     cublasFillMode_t uplo,
2197     cublasOperation_t trans,
2198     cublasDiagType_t diag,
2199     int m,
2200     int n,
2201     const(double)* alpha,
2202     const(double)* A,
2203     int lda,
2204     double* B,
2205     int ldb);
2206 
2207 /* host or device pointer */
2208 cublasStatus_t cublasCtrsm_v2 (
2209     cublasHandle_t handle,
2210     cublasSideMode_t side,
2211     cublasFillMode_t uplo,
2212     cublasOperation_t trans,
2213     cublasDiagType_t diag,
2214     int m,
2215     int n,
2216     const(cuComplex)* alpha,
2217     const(cuComplex)* A,
2218     int lda,
2219     cuComplex* B,
2220     int ldb);
2221 
2222 /* host or device pointer */
2223 cublasStatus_t cublasZtrsm_v2 (
2224     cublasHandle_t handle,
2225     cublasSideMode_t side,
2226     cublasFillMode_t uplo,
2227     cublasOperation_t trans,
2228     cublasDiagType_t diag,
2229     int m,
2230     int n,
2231     const(cuDoubleComplex)* alpha,
2232     const(cuDoubleComplex)* A,
2233     int lda,
2234     cuDoubleComplex* B,
2235     int ldb);
2236 
2237 /* TRMM */
2238 
2239 /* host or device pointer */
2240 cublasStatus_t cublasStrmm_v2 (
2241     cublasHandle_t handle,
2242     cublasSideMode_t side,
2243     cublasFillMode_t uplo,
2244     cublasOperation_t trans,
2245     cublasDiagType_t diag,
2246     int m,
2247     int n,
2248     const(float)* alpha,
2249     const(float)* A,
2250     int lda,
2251     const(float)* B,
2252     int ldb,
2253     float* C,
2254     int ldc);
2255 
2256 /* host or device pointer */
2257 cublasStatus_t cublasDtrmm_v2 (
2258     cublasHandle_t handle,
2259     cublasSideMode_t side,
2260     cublasFillMode_t uplo,
2261     cublasOperation_t trans,
2262     cublasDiagType_t diag,
2263     int m,
2264     int n,
2265     const(double)* alpha,
2266     const(double)* A,
2267     int lda,
2268     const(double)* B,
2269     int ldb,
2270     double* C,
2271     int ldc);
2272 
2273 /* host or device pointer */
2274 cublasStatus_t cublasCtrmm_v2 (
2275     cublasHandle_t handle,
2276     cublasSideMode_t side,
2277     cublasFillMode_t uplo,
2278     cublasOperation_t trans,
2279     cublasDiagType_t diag,
2280     int m,
2281     int n,
2282     const(cuComplex)* alpha,
2283     const(cuComplex)* A,
2284     int lda,
2285     const(cuComplex)* B,
2286     int ldb,
2287     cuComplex* C,
2288     int ldc);
2289 
2290 /* host or device pointer */
2291 cublasStatus_t cublasZtrmm_v2 (
2292     cublasHandle_t handle,
2293     cublasSideMode_t side,
2294     cublasFillMode_t uplo,
2295     cublasOperation_t trans,
2296     cublasDiagType_t diag,
2297     int m,
2298     int n,
2299     const(cuDoubleComplex)* alpha,
2300     const(cuDoubleComplex)* A,
2301     int lda,
2302     const(cuDoubleComplex)* B,
2303     int ldb,
2304     cuDoubleComplex* C,
2305     int ldc);
2306 
2307 /* BATCH GEMM */
2308 
2309 /* host or device pointer */
2310 
2311 /* host or device pointer */
2312 cublasStatus_t cublasSgemmBatched (
2313     cublasHandle_t handle,
2314     cublasOperation_t transa,
2315     cublasOperation_t transb,
2316     int m,
2317     int n,
2318     int k,
2319     const(float)* alpha,
2320     const(float)** Aarray,
2321     int lda,
2322     const(float)** Barray,
2323     int ldb,
2324     const(float)* beta,
2325     float** Carray,
2326     int ldc,
2327     int batchCount);
2328 
2329 /* host or device pointer */
2330 
2331 /* host or device pointer */
2332 cublasStatus_t cublasDgemmBatched (
2333     cublasHandle_t handle,
2334     cublasOperation_t transa,
2335     cublasOperation_t transb,
2336     int m,
2337     int n,
2338     int k,
2339     const(double)* alpha,
2340     const(double)** Aarray,
2341     int lda,
2342     const(double)** Barray,
2343     int ldb,
2344     const(double)* beta,
2345     double** Carray,
2346     int ldc,
2347     int batchCount);
2348 
2349 /* host or device pointer */
2350 
2351 /* host or device pointer */
2352 cublasStatus_t cublasCgemmBatched (
2353     cublasHandle_t handle,
2354     cublasOperation_t transa,
2355     cublasOperation_t transb,
2356     int m,
2357     int n,
2358     int k,
2359     const(cuComplex)* alpha,
2360     const(cuComplex)** Aarray,
2361     int lda,
2362     const(cuComplex)** Barray,
2363     int ldb,
2364     const(cuComplex)* beta,
2365     cuComplex** Carray,
2366     int ldc,
2367     int batchCount);
2368 
2369 /* host or device pointer */
2370 
2371 /* host or device pointer */
2372 cublasStatus_t cublasZgemmBatched (
2373     cublasHandle_t handle,
2374     cublasOperation_t transa,
2375     cublasOperation_t transb,
2376     int m,
2377     int n,
2378     int k,
2379     const(cuDoubleComplex)* alpha,
2380     const(cuDoubleComplex)** Aarray,
2381     int lda,
2382     const(cuDoubleComplex)** Barray,
2383     int ldb,
2384     const(cuDoubleComplex)* beta,
2385     cuDoubleComplex** Carray,
2386     int ldc,
2387     int batchCount);
2388 
2389 /* ---------------- CUBLAS BLAS-like extension ---------------- */
2390 /* GEAM */
2391 
2392 /* host or device pointer */
2393 
2394 /* host or device pointer */
2395 cublasStatus_t cublasSgeam (
2396     cublasHandle_t handle,
2397     cublasOperation_t transa,
2398     cublasOperation_t transb,
2399     int m,
2400     int n,
2401     const(float)* alpha,
2402     const(float)* A,
2403     int lda,
2404     const(float)* beta,
2405     const(float)* B,
2406     int ldb,
2407     float* C,
2408     int ldc);
2409 
2410 /* host or device pointer */
2411 
2412 /* host or device pointer */
2413 cublasStatus_t cublasDgeam (
2414     cublasHandle_t handle,
2415     cublasOperation_t transa,
2416     cublasOperation_t transb,
2417     int m,
2418     int n,
2419     const(double)* alpha,
2420     const(double)* A,
2421     int lda,
2422     const(double)* beta,
2423     const(double)* B,
2424     int ldb,
2425     double* C,
2426     int ldc);
2427 
2428 /* host or device pointer */
2429 
2430 /* host or device pointer */
2431 cublasStatus_t cublasCgeam (
2432     cublasHandle_t handle,
2433     cublasOperation_t transa,
2434     cublasOperation_t transb,
2435     int m,
2436     int n,
2437     const(cuComplex)* alpha,
2438     const(cuComplex)* A,
2439     int lda,
2440     const(cuComplex)* beta,
2441     const(cuComplex)* B,
2442     int ldb,
2443     cuComplex* C,
2444     int ldc);
2445 
2446 /* host or device pointer */
2447 
2448 /* host or device pointer */
2449 cublasStatus_t cublasZgeam (
2450     cublasHandle_t handle,
2451     cublasOperation_t transa,
2452     cublasOperation_t transb,
2453     int m,
2454     int n,
2455     const(cuDoubleComplex)* alpha,
2456     const(cuDoubleComplex)* A,
2457     int lda,
2458     const(cuDoubleComplex)* beta,
2459     const(cuDoubleComplex)* B,
2460     int ldb,
2461     cuDoubleComplex* C,
2462     int ldc);
2463 
2464 /* Batched LU - GETRF*/
2465 
2466 /*Device pointer*/
2467 
2468 /*Device Pointer*/
2469 /*Device Pointer*/
2470 cublasStatus_t cublasSgetrfBatched (
2471     cublasHandle_t handle,
2472     int n,
2473     float** A,
2474     int lda,
2475     int* P,
2476     int* info,
2477     int batchSize);
2478 
2479 /*Device pointer*/
2480 
2481 /*Device Pointer*/
2482 /*Device Pointer*/
2483 cublasStatus_t cublasDgetrfBatched (
2484     cublasHandle_t handle,
2485     int n,
2486     double** A,
2487     int lda,
2488     int* P,
2489     int* info,
2490     int batchSize);
2491 
2492 /*Device pointer*/
2493 
2494 /*Device Pointer*/
2495 /*Device Pointer*/
2496 cublasStatus_t cublasCgetrfBatched (
2497     cublasHandle_t handle,
2498     int n,
2499     cuComplex** A,
2500     int lda,
2501     int* P,
2502     int* info,
2503     int batchSize);
2504 
2505 /*Device pointer*/
2506 
2507 /*Device Pointer*/
2508 /*Device Pointer*/
2509 cublasStatus_t cublasZgetrfBatched (
2510     cublasHandle_t handle,
2511     int n,
2512     cuDoubleComplex** A,
2513     int lda,
2514     int* P,
2515     int* info,
2516     int batchSize);
2517 
2518 /* Batched inversion based on LU factorization from getrf */
2519 
2520 /*Device pointer*/
2521 
2522 /*Device pointer*/
2523 /*Device pointer*/
2524 cublasStatus_t cublasSgetriBatched (
2525     cublasHandle_t handle,
2526     int n,
2527     const(float)** A,
2528     int lda,
2529     const(int)* P,
2530     float** C,
2531     int ldc,
2532     int* info,
2533     int batchSize);
2534 
2535 /*Device pointer*/
2536 
2537 /*Device pointer*/
2538 /*Device pointer*/
2539 cublasStatus_t cublasDgetriBatched (
2540     cublasHandle_t handle,
2541     int n,
2542     const(double)** A,
2543     int lda,
2544     const(int)* P,
2545     double** C,
2546     int ldc,
2547     int* info,
2548     int batchSize);
2549 
2550 /*Device pointer*/
2551 
2552 /*Device pointer*/
2553 /*Device pointer*/
2554 cublasStatus_t cublasCgetriBatched (
2555     cublasHandle_t handle,
2556     int n,
2557     const(cuComplex)** A,
2558     int lda,
2559     const(int)* P,
2560     cuComplex** C,
2561     int ldc,
2562     int* info,
2563     int batchSize);
2564 
2565 /*Device pointer*/
2566 
2567 /*Device pointer*/
2568 /*Device pointer*/
2569 cublasStatus_t cublasZgetriBatched (
2570     cublasHandle_t handle,
2571     int n,
2572     const(cuDoubleComplex)** A,
2573     int lda,
2574     const(int)* P,
2575     cuDoubleComplex** C,
2576     int ldc,
2577     int* info,
2578     int batchSize);
2579 
2580 /* Batched solver based on LU factorization from getrf */
2581 
2582 cublasStatus_t cublasSgetrsBatched (
2583     cublasHandle_t handle,
2584     cublasOperation_t trans,
2585     int n,
2586     int nrhs,
2587     const(float)** Aarray,
2588     int lda,
2589     const(int)* devIpiv,
2590     float** Barray,
2591     int ldb,
2592     int* info,
2593     int batchSize);
2594 
2595 cublasStatus_t cublasDgetrsBatched (
2596     cublasHandle_t handle,
2597     cublasOperation_t trans,
2598     int n,
2599     int nrhs,
2600     const(double)** Aarray,
2601     int lda,
2602     const(int)* devIpiv,
2603     double** Barray,
2604     int ldb,
2605     int* info,
2606     int batchSize);
2607 
2608 cublasStatus_t cublasCgetrsBatched (
2609     cublasHandle_t handle,
2610     cublasOperation_t trans,
2611     int n,
2612     int nrhs,
2613     const(cuComplex)** Aarray,
2614     int lda,
2615     const(int)* devIpiv,
2616     cuComplex** Barray,
2617     int ldb,
2618     int* info,
2619     int batchSize);
2620 
2621 cublasStatus_t cublasZgetrsBatched (
2622     cublasHandle_t handle,
2623     cublasOperation_t trans,
2624     int n,
2625     int nrhs,
2626     const(cuDoubleComplex)** Aarray,
2627     int lda,
2628     const(int)* devIpiv,
2629     cuDoubleComplex** Barray,
2630     int ldb,
2631     int* info,
2632     int batchSize);
2633 
2634 /* TRSM - Batched Triangular Solver */
2635 
2636 /*Host or Device Pointer*/
2637 cublasStatus_t cublasStrsmBatched (
2638     cublasHandle_t handle,
2639     cublasSideMode_t side,
2640     cublasFillMode_t uplo,
2641     cublasOperation_t trans,
2642     cublasDiagType_t diag,
2643     int m,
2644     int n,
2645     const(float)* alpha,
2646     const(float)** A,
2647     int lda,
2648     float** B,
2649     int ldb,
2650     int batchCount);
2651 
2652 /*Host or Device Pointer*/
2653 cublasStatus_t cublasDtrsmBatched (
2654     cublasHandle_t handle,
2655     cublasSideMode_t side,
2656     cublasFillMode_t uplo,
2657     cublasOperation_t trans,
2658     cublasDiagType_t diag,
2659     int m,
2660     int n,
2661     const(double)* alpha,
2662     const(double)** A,
2663     int lda,
2664     double** B,
2665     int ldb,
2666     int batchCount);
2667 
2668 /*Host or Device Pointer*/
2669 cublasStatus_t cublasCtrsmBatched (
2670     cublasHandle_t handle,
2671     cublasSideMode_t side,
2672     cublasFillMode_t uplo,
2673     cublasOperation_t trans,
2674     cublasDiagType_t diag,
2675     int m,
2676     int n,
2677     const(cuComplex)* alpha,
2678     const(cuComplex)** A,
2679     int lda,
2680     cuComplex** B,
2681     int ldb,
2682     int batchCount);
2683 
2684 /*Host or Device Pointer*/
2685 cublasStatus_t cublasZtrsmBatched (
2686     cublasHandle_t handle,
2687     cublasSideMode_t side,
2688     cublasFillMode_t uplo,
2689     cublasOperation_t trans,
2690     cublasDiagType_t diag,
2691     int m,
2692     int n,
2693     const(cuDoubleComplex)* alpha,
2694     const(cuDoubleComplex)** A,
2695     int lda,
2696     cuDoubleComplex** B,
2697     int ldb,
2698     int batchCount);
2699 
2700 /* Batched - MATINV*/
2701 
2702 /*Device pointer*/
2703 
2704 /*Device pointer*/
2705 
2706 /*Device Pointer*/
2707 cublasStatus_t cublasSmatinvBatched (
2708     cublasHandle_t handle,
2709     int n,
2710     const(float)** A,
2711     int lda,
2712     float** Ainv,
2713     int lda_inv,
2714     int* info,
2715     int batchSize);
2716 
2717 /*Device pointer*/
2718 
2719 /*Device pointer*/
2720 
2721 /*Device Pointer*/
2722 cublasStatus_t cublasDmatinvBatched (
2723     cublasHandle_t handle,
2724     int n,
2725     const(double)** A,
2726     int lda,
2727     double** Ainv,
2728     int lda_inv,
2729     int* info,
2730     int batchSize);
2731 
2732 /*Device pointer*/
2733 
2734 /*Device pointer*/
2735 
2736 /*Device Pointer*/
2737 cublasStatus_t cublasCmatinvBatched (
2738     cublasHandle_t handle,
2739     int n,
2740     const(cuComplex)** A,
2741     int lda,
2742     cuComplex** Ainv,
2743     int lda_inv,
2744     int* info,
2745     int batchSize);
2746 
2747 /*Device pointer*/
2748 
2749 /*Device pointer*/
2750 
2751 /*Device Pointer*/
2752 cublasStatus_t cublasZmatinvBatched (
2753     cublasHandle_t handle,
2754     int n,
2755     const(cuDoubleComplex)** A,
2756     int lda,
2757     cuDoubleComplex** Ainv,
2758     int lda_inv,
2759     int* info,
2760     int batchSize);
2761 
2762 /* Batch QR Factorization */
2763 
2764 /*Device pointer*/
2765 
2766 /* Device pointer*/
2767 cublasStatus_t cublasSgeqrfBatched (
2768     cublasHandle_t handle,
2769     int m,
2770     int n,
2771     float** Aarray,
2772     int lda,
2773     float** TauArray,
2774     int* info,
2775     int batchSize);
2776 
2777 /*Device pointer*/
2778 
2779 /* Device pointer*/
2780 cublasStatus_t cublasDgeqrfBatched (
2781     cublasHandle_t handle,
2782     int m,
2783     int n,
2784     double** Aarray,
2785     int lda,
2786     double** TauArray,
2787     int* info,
2788     int batchSize);
2789 
2790 /*Device pointer*/
2791 
2792 /* Device pointer*/
2793 cublasStatus_t cublasCgeqrfBatched (
2794     cublasHandle_t handle,
2795     int m,
2796     int n,
2797     cuComplex** Aarray,
2798     int lda,
2799     cuComplex** TauArray,
2800     int* info,
2801     int batchSize);
2802 
2803 /*Device pointer*/
2804 
2805 /* Device pointer*/
2806 cublasStatus_t cublasZgeqrfBatched (
2807     cublasHandle_t handle,
2808     int m,
2809     int n,
2810     cuDoubleComplex** Aarray,
2811     int lda,
2812     cuDoubleComplex** TauArray,
2813     int* info,
2814     int batchSize);
2815 
2816 /* Least Square Min only m >= n and Non-transpose supported */
2817 
2818 /*Device pointer*/
2819 
2820 /* Device pointer*/
2821 
2822 /* Device pointer*/
2823 cublasStatus_t cublasSgelsBatched (
2824     cublasHandle_t handle,
2825     cublasOperation_t trans,
2826     int m,
2827     int n,
2828     int nrhs,
2829     float** Aarray,
2830     int lda,
2831     float** Carray,
2832     int ldc,
2833     int* info,
2834     int* devInfoArray,
2835     int batchSize);
2836 
2837 /*Device pointer*/
2838 
2839 /* Device pointer*/
2840 
2841 /* Device pointer*/
2842 cublasStatus_t cublasDgelsBatched (
2843     cublasHandle_t handle,
2844     cublasOperation_t trans,
2845     int m,
2846     int n,
2847     int nrhs,
2848     double** Aarray,
2849     int lda,
2850     double** Carray,
2851     int ldc,
2852     int* info,
2853     int* devInfoArray,
2854     int batchSize);
2855 
2856 /*Device pointer*/
2857 
2858 /* Device pointer*/
2859 cublasStatus_t cublasCgelsBatched (
2860     cublasHandle_t handle,
2861     cublasOperation_t trans,
2862     int m,
2863     int n,
2864     int nrhs,
2865     cuComplex** Aarray,
2866     int lda,
2867     cuComplex** Carray,
2868     int ldc,
2869     int* info,
2870     int* devInfoArray,
2871     int batchSize);
2872 
2873 /*Device pointer*/
2874 
2875 /* Device pointer*/
2876 cublasStatus_t cublasZgelsBatched (
2877     cublasHandle_t handle,
2878     cublasOperation_t trans,
2879     int m,
2880     int n,
2881     int nrhs,
2882     cuDoubleComplex** Aarray,
2883     int lda,
2884     cuDoubleComplex** Carray,
2885     int ldc,
2886     int* info,
2887     int* devInfoArray,
2888     int batchSize);
2889 
2890 /* DGMM */
2891 cublasStatus_t cublasSdgmm (
2892     cublasHandle_t handle,
2893     cublasSideMode_t mode,
2894     int m,
2895     int n,
2896     const(float)* A,
2897     int lda,
2898     const(float)* x,
2899     int incx,
2900     float* C,
2901     int ldc);
2902 
2903 cublasStatus_t cublasDdgmm (
2904     cublasHandle_t handle,
2905     cublasSideMode_t mode,
2906     int m,
2907     int n,
2908     const(double)* A,
2909     int lda,
2910     const(double)* x,
2911     int incx,
2912     double* C,
2913     int ldc);
2914 
2915 cublasStatus_t cublasCdgmm (
2916     cublasHandle_t handle,
2917     cublasSideMode_t mode,
2918     int m,
2919     int n,
2920     const(cuComplex)* A,
2921     int lda,
2922     const(cuComplex)* x,
2923     int incx,
2924     cuComplex* C,
2925     int ldc);
2926 
2927 cublasStatus_t cublasZdgmm (
2928     cublasHandle_t handle,
2929     cublasSideMode_t mode,
2930     int m,
2931     int n,
2932     const(cuDoubleComplex)* A,
2933     int lda,
2934     const(cuDoubleComplex)* x,
2935     int incx,
2936     cuDoubleComplex* C,
2937     int ldc);
2938 
2939 /* TPTTR : Triangular Pack format to Triangular format */
2940 cublasStatus_t cublasStpttr (
2941     cublasHandle_t handle,
2942     cublasFillMode_t uplo,
2943     int n,
2944     const(float)* AP,
2945     float* A,
2946     int lda);
2947 
2948 cublasStatus_t cublasDtpttr (
2949     cublasHandle_t handle,
2950     cublasFillMode_t uplo,
2951     int n,
2952     const(double)* AP,
2953     double* A,
2954     int lda);
2955 
2956 cublasStatus_t cublasCtpttr (
2957     cublasHandle_t handle,
2958     cublasFillMode_t uplo,
2959     int n,
2960     const(cuComplex)* AP,
2961     cuComplex* A,
2962     int lda);
2963 
2964 cublasStatus_t cublasZtpttr (
2965     cublasHandle_t handle,
2966     cublasFillMode_t uplo,
2967     int n,
2968     const(cuDoubleComplex)* AP,
2969     cuDoubleComplex* A,
2970     int lda);
2971 
2972 /* TRTTP : Triangular format to Triangular Pack format */
2973 cublasStatus_t cublasStrttp (
2974     cublasHandle_t handle,
2975     cublasFillMode_t uplo,
2976     int n,
2977     const(float)* A,
2978     int lda,
2979     float* AP);
2980 
2981 cublasStatus_t cublasDtrttp (
2982     cublasHandle_t handle,
2983     cublasFillMode_t uplo,
2984     int n,
2985     const(double)* A,
2986     int lda,
2987     double* AP);
2988 
2989 cublasStatus_t cublasCtrttp (
2990     cublasHandle_t handle,
2991     cublasFillMode_t uplo,
2992     int n,
2993     const(cuComplex)* A,
2994     int lda,
2995     cuComplex* AP);
2996 
2997 cublasStatus_t cublasZtrttp (
2998     cublasHandle_t handle,
2999     cublasFillMode_t uplo,
3000     int n,
3001     const(cuDoubleComplex)* A,
3002     int lda,
3003     cuDoubleComplex* AP);